function longestSubarray(nums) {
  let left = 0; // 窗口左边界
  let maxLength = 0; // 最大长度
  let zeroCount = 0; // 窗口中0的数量

  for (let right = 0; right < nums.length; right++) {
    // 如果当前元素是0，增加0的计数
    if (nums[right] === 0) {
      zeroCount++;
    }

    // 当窗口中0的数量超过1时，移动左边界直到0的数量不超过1
    while (zeroCount > 1) {
      if (nums[left] === 0) {
        zeroCount--;
      }
      left++;
    }

    // 更新最大长度，因为我们必须删除一个元素，所以实际长度是(right - left)
    maxLength = Math.max(maxLength, right - left);
  }

  return maxLength;
}

// 测试案例
console.log(longestSubarray([1, 1, 0, 1])); // 输出: 3
console.log(longestSubarray([0, 1, 1, 1, 0, 1, 1, 0, 1])); // 输出: 5
console.log(longestSubarray([1, 1, 1])); // 输出: 2
